import { defineStore } from 'pinia'
import { ref } from 'vue'
import { ApiUserUpdate, ApiUserInfo } from '@/service/user'

const initState = { nickname: '', avatar: '', isMember: false }


export const useUserStore = defineStore(
  'user',
  () => {
    const userInfo = ref<IUserInfo>({ ...initState })
    const loginInfo = ref<ILoginInfo>({})

    const setUserInfo = (val: IUserInfo) => {
      userInfo.value = val
    }
    const updateUserInfo = async (val: IUserInfo) => {
      await ApiUserUpdate(val).then((res) => {
        if (res.data) {
          getUserInfo()
        } 
      })
    }

    const getUserInfo = () => {
      ApiUserInfo().then((res) => {
        setUserInfo(res.data)
      })
    }

    const setLoginInfo = (val: ILoginInfo) => {
      loginInfo.value = val
    }

    const clearUserInfo = () => {
      userInfo.value = { ...initState }
      loginInfo.value = {}
    }
    // 一般没有reset需求，不需要的可以删除
    const reset = () => {
      userInfo.value = { ...initState }
    }
    const isLogined = computed(() => !!loginInfo.value.token)

    return {
      userInfo,
      setUserInfo,
      clearUserInfo,
      isLogined,
      reset,
      loginInfo,
      setLoginInfo,
      updateUserInfo,
      getUserInfo
    }
  },
  {
    persist: true,
  },
)
